<?php
/*
 * 注册器模式无法在IDE上实现代码自动完成，不建议使用
 * 注册器模式的使用场景：
 * 1.在app的执行声明过程中可能存在很多需要统一管理的对象，注册器模式可以帮你管理这些对象
 */

namespace App\DesignPattern\Register;

/**
 * Description of EnvRegister
 *
 * @author Administrator
 */
class EnvRegister {
	
	/**
	 * 所有需要统一管理的对象
	 * @var array
	 */
	private static $_objs = [];
	
	/**
	 * 添加一个需要统一管理的对象
	 * @param string $alias 对象别名
	 * @param object $obj
	 */
	public static function add($alias, $obj){
		self::$_objs[$alias] = $obj;
	}
	
	/**
	 * 删除一个需要统一管理的对象
	 * @param string $alias 对象别名
	 */
	public static function delete($alias){
		self::$_objs[$alias] = null;
		unset(self::$_objs[$alias]);
	}
	
	/**
	 * 获取一个需要统一管理的对象
	 * @param string $alias 对象别名
	 * @return object 如果不存在时返回false
	 */
	public static function get($alias){
		if(in_array($alias, array_keys(self::$_objs))){
			return self::$_objs[$alias];
		}
		return false;
	}
	
	/**
	 * 清空所有需要管理的对象
	 */
	public static function clean(){
		foreach(array_keys(self::$_objs) as $alias){
			self::$_objs[$alias] = null;
		}
		self::$_objs = [];
	}
}
